Docker 部署 Nginx,以及 Nginx 反向代理的配置。
Docker 部署 Nginx
1 | docker container run \ |
以上命令会部署一个 nginx 容器, 各参数含义:
-d
后台运行-p 8099:80
容器的 80 端口映射宿主的 8099 的端口--name mynginx
指定容器的名字为 mynginx
部署成功后,访问 IP:8099
,即可看到 nginx 的默然欢迎页。
挂载宿主目录
Nginx 容器的默认配置文件位于 /etc/nginx/conf.d/default.conf
,其默认配置的地址为 /usr/share/nginx/html/index.html
为了更加直观地看到是否成功挂载目录,我们新建一个 html 文件代替 Nginx 的默然欢迎页。
首先在宿主中新建目录 mkdir /nginx-demo/html/
,并在该目录下新建一个 html 文件 vim index.html
,输入 <h1>Hello World</h1>
并保存。重新运行一下容器:1
2
3
4
5
6
7docker container run \
-d \
-p 8099:80 \
-v /nginx-demo/html/:/usr/share/nginx/html \
--rm \
--name mynginx \
nginx
现在访问 IP:8099
应该就可以看到 hello world 了。 -v 宿主目录:容器目录
命令即可实现目录挂载。
映射配置目录
把容器 mynginx 的 /etc/nginx
拷贝到宿主 /nginx-demo/conf
目录1
docker cp mynginx:/etc/nginx /nginx-demo/conf
可以把配置修改后再挂载到容器中,已解决 Nginx 容器中无法使用 vim 命令的问题。
代理其他容器
连接容器 --link tomcat001:t01
-–link
表示当前命令启动的容器要和另一个名叫 tomcat001 的容器建立连接,tomcat001:t01
中的 t01 表示 t01 是连接建立后 tomcat001 的别名,或者可以理解为容器启动后,在容器的 /etc/hosts
文件中加入了一条记录,ip 是 tomcat001 的 ip,name 是 t01。
我们输入 docke exec -it mynginx /bin/bash
登录 mynginx,再输入 cat /etc/hosts
即可看到 t01 指代的 ip 地址。
另外在容器内使用 env 可查看环境变量
1 | T01_PORT_8080_TCP_PORT=8080 //可以看到容器t01端口为8080 |
反向代理,负载均衡
修改 /etc/nginx/con.f/default.conf
配置文件
1 | upstream mytomcat{ |
重新运行一下容器
1 | docker container run \ |
这时访问 IP:8099
已不再指向原来的 hello world 页面,而是反向代理到了 tomcat 的主页。
其他
docker 已关闭,却依然可以访问 nginx 页面?
可能是浏览器缓存
代理宿主机
一番操作后突然想到,直接在部署 nginx 时映射主机的 80 端口不就可以了 (:з」∠) 。